package com.atguigu.yygh.hosp.controller.api;

import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.atguigu.yygh.common.exception.YyghException;
import com.atguigu.yygh.common.result.ResultCodeEnum;
import com.atguigu.yygh.common.helper.HttpRequestHelper;
import com.atguigu.yygh.common.result.Result;
import com.atguigu.yygh.common.utils.MD5;
import com.atguigu.yygh.hosp.service.HospitalService;
import com.atguigu.yygh.hosp.service.HospitalSetService;
import com.atguigu.yygh.model.hosp.Hospital;

/** 
* @author 作者 Your-Name: 
* @version 创建时间：2021年4月26日 下午3:50:39 
* 类说明 
*/
@RestController
@RequestMapping("/api/hosp")
public class ApiContriller {
	
	@Autowired
	private HospitalService hospitalService;
	
	@Autowired
	private HospitalSetService hospitalSetService;
	
	/**
	 * 得到 hospital_manager 传过来的数据 并对数据进行操作
	 */
	
	//上传医院接口
	@PostMapping("/saveHospital")
	public Result saveHospital(HttpServletRequest request){
		//获取到 传递过来的医院信息
		//返回   map 集合
		Map<String, String[]> requestMap = request.getParameterMap();
		Map<String, Object> paramMap = HttpRequestHelper.switchMap(requestMap);
		
		//类似于 权限校验
		// 1 获取医院系统 传递过来的签名   signKey 已经进行MD5加密
		String hospitalSign = paramMap.get("sign").toString();
		
		// 2 yygh_hosp.yygh_set表中的签名     根据传递过来的医院编号 查询数据库 查询签名
		String hostcode = paramMap.get("hostcode").toString();
		String signKey = hospitalSetService.getSignKey(hostcode);
		
		// 3 把从数据库查询的 signkey 进行md5加密 
		String signKeyMD5 = MD5.encrypt(signKey);
		
		// 4 之后再进行比较  判断签名是否一致
		if( !hospitalSign.equals(signKeyMD5) ){
			// 提示  自定义异常
			throw new YyghException(ResultCodeEnum.SIGN_ERROR);
		}
		
		//传输过程中  "+" 转换成 " "，因此我们需要转回来
		//传递过来图片 内容
		String logoData = paramMap.get("logoData").toString();
		logoData = logoData.replaceAll(" ", "+");
		paramMap.put("logoData", logoData);
		//调用service方法，把数据存储到数据库中
		hospitalService.save(paramMap);
		return Result.ok();
	}
	
	//查询医院接口
	@PostMapping("/hospital/show")
	public Result showHospital(HttpServletRequest request){
		//获取到 传递过来的医院信息
		//返回   map 集合
		Map<String, String[]> requestMap = request.getParameterMap();
		Map<String, Object> paramMap = HttpRequestHelper.switchMap(requestMap);
		//    根据传递过来的医院编号 查询数据库
		String hospitalSign = paramMap.get("sign").toString();
		String hostcode = paramMap.get("hostcode").toString();
        String signKey = hospitalSetService.getSignKey(hostcode);
		
		// 3 把从数据库查询的 signkey 进行md5加密 
		String signKeyMD5 = MD5.encrypt(signKey);
		
		// 4 之后再进行比较  判断签名是否一致
		if( !hospitalSign.equals(signKeyMD5) ){
			// 提示  自定义异常
			throw new YyghException(ResultCodeEnum.SIGN_ERROR);
		}
		//调用service中的方法 实现根据医院编号进行查询
        Hospital hospital = hospitalService.getByHostCode(hostcode);
		return Result.ok(hospital);
		
	}

}
